﻿using System;
using System.Diagnostics;
using Hallenberg.Core;

namespace Hallenberg.SmartClient.Menu
{
    //[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments"), AttributeUsage(AttributeTargets.Method)]
    //public sealed class DependentMenuItemAttribute : MenuItemAttribute
    //{
    //    public DependentMenuItemAttribute(string triggerMenuName, string menuItemName, string menuTitle)
    //        : base(triggerMenuName, menuItemName, menuTitle)
    //    {
    //    }

    //    public DependentMenuItemAttribute(string triggerMenuName, string menuItemName, string menuTitle, IPredicate displayMenuEvaluator)
    //        : base(triggerMenuName, menuItemName, menuTitle, displayMenuEvaluator)
    //    {
    //    }
    //}

    //[AttributeUsage(AttributeTargets.Method)]
    //public sealed class DependentMenuItemAttribute : Attribute
    //{
    //    public string TriggerMenuName { get; private set; }
    //    public string MenuItemName { get; private set; }
    //    public string MenuTitle { get; private set; }

    //    public string ToolTip { get; set; }
    //    public int SortIndex { get; set; }
    //    public IPredicate DisplayMenuEvaluator { get; private set; }
    //    public MenuItemDisabledPolicy DisabledPolicy { get; set; }

    //    public DependentMenuItemAttribute(string triggerMenuName, string menuItemName, string menuTitle)
    //    {
    //        #region Asserting assumptions

    //        Debug.Assert(string.IsNullOrEmpty(triggerMenuName) == false);
    //        if (string.IsNullOrEmpty(triggerMenuName))
    //        {
    //            throw new ArgumentNullException("triggerMenuName");
    //        }

    //        Debug.Assert(string.IsNullOrEmpty(menuItemName) == false);
    //        if (string.IsNullOrEmpty(menuItemName))
    //        {
    //            throw new ArgumentNullException("menuItemName");
    //        }

    //        Debug.Assert(string.IsNullOrEmpty(menuTitle) == false);
    //        if (string.IsNullOrEmpty(menuTitle))
    //        {
    //            throw new ArgumentNullException("menuTitle");
    //        }

    //        #endregion

    //        this.TriggerMenuName = triggerMenuName;            
    //        this.MenuItemName = menuItemName;
    //        this.MenuTitle = menuTitle;

    //        this.ToolTip = string.Empty;
    //        this.SortIndex = 0;
    //        this.DisplayMenuEvaluator = null;
    //        this.DisabledPolicy = MenuItemDisabledPolicy.Hide;
    //    }

    //    public DependentMenuItemAttribute(string triggerMenuName, string menuItemName, string menuTitle, IPredicate displayMenuEvaluator)
    //        : this(triggerMenuName, menuItemName, menuTitle)
    //    {
    //        this.DisplayMenuEvaluator = displayMenuEvaluator;
    //    }
    //}
}
